package com.cherry.system.service;

import com.cherry.common.core.domain.Ztree;
import com.cherry.common.core.domain.entity.SysMajor;

import java.util.List;

/**
 * 专业管理 服务层
 *
 * @author 孙晨阳
 */
public interface ISysMajorService {
    /**
     * 根据专业名称查询专业信息
     *
     * @param majorName 专业名称
     * @return 结果
     */
    SysMajor selectMajorByName(String majorName);

    /**
     * 查询专业管理数据
     *
     * @param major 专业信息
     * @return 专业信息集合
     */
    List<SysMajor> selectMajorList(SysMajor major);

    /**
     * 查询专业管理树
     *
     * @param major 专业信息
     * @return 所有专业信息
     */
    List<Ztree> selectMajorTree(SysMajor major);

    /**
     * 根据专业ID查询信息
     *
     * @param majorId 专业ID
     * @return 专业信息
     */
    SysMajor selectMajorById(Long majorId);

    /**
     * 查询专业管理树（排除下级）
     *
     * @param major 专业信息
     * @return 所有专业信息
     */
    List<Ztree> selectMajorTreeExcludeChild(SysMajor major);

    /**
     * 校验专业名称是否唯一
     *
     * @param major 专业信息
     * @return 结果
     */
    String checkMajorNameUnique(SysMajor major);

    /**
     * 新增专业信息
     *
     * @param major 专业信息
     * @return 结果
     */
    int insertMajor(SysMajor major);

    /**
     * 根据ID查询所有子专业（学院）（正常状态）
     *
     * @param majorId 专业（学院）ID
     * @return 结果
     */
    int selectNormalChildrenMajorById(Long majorId);

    /**
     * 修改保存专业（学院）信息
     *
     * @param major 专业信息
     * @return 结果
     */
    int updateMajor(SysMajor major);

    /**
     * 根据父部门ID查询下级部门数量
     *
     * @param parentId 父部门ID
     * @return 结果
     */
    int selectMajorCount(Long parentId);

    /**
     * 查询学院或专业是否存在用户
     *
     * @param majorId 学院或专业ID
     * @return 结果
     */
    boolean checkMajorExistUser(Long majorId);

    /**
     * 删除学院或专业
     *
     * @param majorId 学院或专业ID
     * @return 结果
     */
    int deleteMajorById(Long majorId);

    /**
     * 专业状态修改
     *
     * @param major 专业信息
     * @return 结果
     */
    int changeStatus(SysMajor major);
}
